package 学生管理系统;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class MainApp {
    // private static int stuId = 0;  //定义静态学员索引

    public static void main(String[] args) throws IOException {
        //主菜单
        //创建学生集合
        ArrayList<Student> stuList = new ArrayList<>();
        //把文件中已存在的数据加载到集合中,开始新一轮的操作
        Utils.load2List(stuList, "易错题/stu.txt");
        //打印主界面
        main_menu:
        while (true) {
            System.out.println("【欢迎进入主菜单】");
            System.out.println("请输入序号进入对应的选项");
            System.out.println("1.学员菜单\t2.教师菜单\t3.退出");
            //创建Scanner键盘录入对象
            Scanner sc = new Scanner(System.in);
            String choose = sc.next();
            switch (choose) {
                case "1":
                    studentManage(sc, stuList);
                    break;
                case "2":
                    teacherManage();
                    break;
                case "3":
                    System.out.println("*******谢谢使用,欢迎下次再来!!!!********");
                    break main_menu;  //结束整个循环
                default:
                    System.out.println("********您输入的序号有问题!!!*******");
                    break;
            }
        }
    }

    private static void teacherManage() {
    }

    //学员界面
    private static void studentManage(Scanner sc, ArrayList<Student> stuList) throws IOException {
        student_menu:
        while (true) {
            System.out.println("【欢迎进入学员菜单】");
            System.out.println("请输入序号进入对应的选项");
            System.out.println("1.添加学员\t2.删除学员\t3.修改学员\t4.查询学员\t5.退出");
            String choose = sc.next();
            switch (choose) {
                case "1":
                    addStudent(sc, stuList);
                    break;
                case "2":
                    deleteStudent(sc, stuList);
                    break;
                case "3":
                    updateStudent(sc, stuList);
                    break;
                case "4":
                    selectStudent(stuList);
                    break;
                case "5":
                    System.out.println("********退出学员菜单!!!!*******");
                    break student_menu;  //结束学员菜单,要退到主菜单
                default:
                    System.out.println("您输入的序号有问题");
                    break;
            }
        }
    }

    //查询学员
    private static void selectStudent(ArrayList<Student> stuList) {
        //先判断学生集合里面有没有信息,没有给出提示,有则打印学生信息
        if (stuList.size() == 0)
            System.out.println("*******没有学生可供查询!!!!*******");
        else {
            //有则遍历集合,打印学员信息
            Utils.printList(stuList);
        }
    }

    //修改学员
    private static void updateStudent(Scanner sc, ArrayList<Student> stuList) throws IOException {
        //判断集合中有没有可以修改的学生信息
        if (stuList.size() == 0)
            System.out.println("********信息都没有,你修改个球球********");
        else {
            //集合中有信息,要先把所有的信息打印出来
            selectStudent(stuList);
            System.out.println("请录入要修改信息的学员学号");
            int id = Integer.parseInt(sc.next());
            //查询要修改的id是否存在
            int index = selectIdFromArrayList(stuList, id);
            if (index == -1)
                System.out.println("********您要修改的信息不存在*******");
            else {
                Student student = stuList.get(index);
                //输入新的姓名,年龄,性别
                System.out.println("请录入新的姓名,如果不变则输入0");
                String newName = sc.next();
                //录入不为0,则修改姓名
                if (!"0".equals(newName))
                    student.setName(newName);
                //录入不为0,则修改年龄
                System.out.println("请录入新的年龄,如果不变则输入0");
                int newAge = Integer.parseInt(sc.next());
                if (!"0".equals(newAge))
                    student.setAge(newAge);
                //录入不为0,则修改性别
                System.out.println("请录入新的性别,如果不变则输入0");
                String newGender = sc.next();
                if (!"0".equals(newGender))
                    student.setGender(newGender);
                //修改后的信息要先同步保存到指定文件,修改一次保存一次,防止中途出问题,数据丢失
                Utils.store2file(stuList, "易错题/stu.txt");
                System.out.println("********修改成功********");
            }
        }
    }

    //删除学员
    private static void deleteStudent(Scanner sc, ArrayList<Student> stuList) throws IOException {
        //判断集合中有没有数据,没有给出提示,有则可以执行删除的功能
        if (stuList.size() == 0)
            System.out.println("********是不是傻,信息都没有删毛线啊********");
            //集合中有信息
        else {
            //把集合中所有的信息打印出来
            selectStudent(stuList);
            //提示录入要删除的学号
            System.out.println("请录入你要删除的学员学号");
            int id = Integer.parseInt(sc.next());
            //判断这个学号是否存在
            int index = selectIdFromArrayList(stuList, id);
            //学号不存在
            if (index == -1)
                System.out.println("********眼神是不是不好,这是从哪拐来的学号*******");
                //学号存在
            else {
                //打印该学号对应的学员信息
                System.out.println("您确定要删除以下信息吗? Y/N");
                System.out.println("-----------------------------------");
                System.out.println(stuList.get(index).show());
                System.out.println("-----------------------------------");
                //接收输入的选择
                String choose = sc.next();
                //确认删除
                if ("Y".equalsIgnoreCase(choose)) {
                    stuList.remove(index);
                    //删除后要将新的集合数据同步到文件中
                    Utils.store2file(stuList, "易错题/stu.txt");
                    System.out.println("********删除成功********");
                    //不确认删除
                } else
                    System.out.println("********删除失败********");
            }
        }
    }

    //添加学员
    private static void addStudent(Scanner sc, ArrayList<Student> stuList) throws IOException {
        //录入添加的学员信息
        System.out.println("请录入学员姓名:");
        String stuName = sc.next();
        System.out.println("请录入学员年龄");
        int stuAge = Integer.parseInt(sc.next());
        System.out.println("请录入学员性别");
        String stuGender = sc.next();
        //将录入的学员信息封装成学生对象
        Student student = new Student(++Utils.stuId, stuName, stuAge, stuGender);
        //将封装好的学生对象添加到集合中
        stuList.add(student);
        //添加后要将新的集合数据同步到文件中
        Utils.store2file(stuList, "易错题/stu.txt");
        //将新的id存入到文件中
        Utils.storId2File("易错题/ids.txt");
        //添加成功后告诉用户添加成功
        System.out.println("*******添加学员成功*******");
    }

    public static int selectIdFromArrayList(ArrayList<Student> stuList, int id) {
        int index = -1;
        for (int i = 0; i < stuList.size(); i++) {
            if (stuList.get(i).getId() == id) {
                index = i;
                break;
            }
        }
        return index;
    }
}
